package com.zenithmind.document.service;

/**
 * 用户上下文服务接口
 * 遵循迪米特法则：封装用户信息获取，减少对外部依赖
 * 遵循单一职责原则：专注于用户上下文管理
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface UserContextService {

    /**
     * 获取当前用户ID
     * 
     * @return 用户ID
     */
    String getCurrentUserId();

    /**
     * 获取当前用户名
     * 
     * @return 用户名
     */
    String getCurrentUsername();

    /**
     * 获取当前用户角色
     * 
     * @return 用户角色列表
     */
    java.util.List<String> getCurrentUserRoles();

    /**
     * 获取当前用户权限
     * 
     * @return 用户权限列表
     */
    java.util.List<String> getCurrentUserPermissions();

    /**
     * 检查当前用户是否有指定角色
     * 
     * @param role 角色名
     * @return 是否有角色
     */
    Boolean hasRole(String role);

    /**
     * 检查当前用户是否有指定权限
     * 
     * @param permission 权限名
     * @return 是否有权限
     */
    Boolean hasPermission(String permission);

    /**
     * 获取当前用户的租户ID
     * 
     * @return 租户ID
     */
    String getCurrentTenantId();

    /**
     * 检查用户是否已认证
     * 
     * @return 是否已认证
     */
    Boolean isAuthenticated();

    /**
     * 获取用户的完整信息
     * 
     * @return 用户信息Map
     */
    java.util.Map<String, Object> getCurrentUserInfo();
}
